Duo Securityを利用してAmazon WorkSpacesにMFA(多要素認証)を導入する
Amazon WorkSpacesの利用にあたり、お客様からセキュリティ対策としてMFA(多要素認証)導入のご要望をいただくケースが多々あります。 Amazon WorkSpacesでMFAを利用するためには、ワンタイムパスワードを認証できるRADIUSサーバーを別途用意するがあります。OSSや商用のパッケージ製品を利用してRADIUSサーバーを構築する方法もありますが、運用の手間を省くという観点ではSaaSを利用するのも有力な選択肢かと思います。
今回は、様々なアプリケーションに対して2段階認証を導入できるサービスDuo Security(以降Duo)を利用して、Amazon WorkSpacesにMFAを導入する方法をご紹介します。
目次
- システム構成
- Duoアカウント登録&初期設定
- 保護対象のアプリケーション(RADIUS)の登録
- Duo Authentication Proxyのインストールと設定
- セキュリティグループの設定
- Microsoft ADのMFAの有効化
- Duoのユーザー作成
- ユーザー側のMFA設定
- WorkSpacesに接続
- まとめ
システム構成
- Active DirectoryはAWSのMicrosoft ADを利用します。
- AD Connectorを利用してオンプレミス環境のActive Directoryと連携することも可能です。
- 本ブログ記事執筆時点ではSimple ADはRADIUSサーバー連携に対応していません。
- AWS上にDuo Authentication Proxyサーバーを構築します。
- Microsoft AD → DuoへはこのDuo Authentication Proxy経由でアクセスします。
- Duo Authentication ProxyはLinux及びWindows向けのパッケージが提供されているのでこれを利用します。
なお、本ブログではWorkSpaces環境の構築手順には触れません。VPC、Microsoft AD、WorkSpaces、EC2(Amazon Linux、Duo Authentication Proxy用)は構築済みの前提で話を進めます。
Duoアカウント登録&初期設定
まずはじめに必要なのはDuoのアカウント登録です。手順は弊社市田のブログ記事に詳しいです。
なお、MFAを利用するためにはDuo MFAプラン($3/User/Month、最低10Userから)の契約が必要です。
保護対象のアプリケーション(RADIUS)の登録
Duoの管理画面にログインし、DuoでRADIUSインテグレーション機能を使うための設定を行います。
- Duo Seucirytの管理画面から「Application」-「Protect an Application」を選択します。
- アプリケーションの一覧から「RADIUS」を選択し「Protect this Application」をクリックします。
- インテグレーションキー、シークレットキー、APIホスト名が発行されるので、これらを控えておきます。(これらの情報は後ほどDuo Authentication Proxyに設定します。)
Duo Authentication Proxyのインストールと設定
EC2(Amazon Linux)にDuo Authentication Proxyをインストールします。
依存パッケージのインストール
OpenSSLやPythonのdevパッケージなどをインストールします。Pythonは「2.6」または「2.7」が必要です。
$ sudo yum install gcc make openssl-devel python-devel libffi-devel
Authentication Proxy for Unixのダウンロード
最新版をダウンロードします。
$ wget https://dl.duosecurity.com/duoauthproxy-latest-src.tgz
ビルド
ダウンロードしたファイルを展開しビルドします。
$ tar xzf duoauthproxy-latest-src.tgz $ cd duoauthproxy-2.7.0-src $ export PYTHON=python $ make
duoauthproxy-2.7.0-src
の「2.7.0」の部分にはダウンロードしたAuthentication Proxyのバージョンを指定します。(本ブログ記事執筆時点のAuthentication Proxy最新版は「2.7.0」でした。)
PYTHON=python
でpythonコマンドのバイナリファイル名を指定します。環境によっては「python2.6」、「python2.7」といったファイル名になるかもしれません。
インストール
デフォルト設定でインストールします。
$ cd duoauthproxy-build $ sudo ./install In what directory do you wish to install the Duo Authentication Proxy? [/opt/duoauthproxy] Enter the name of a user account under which the Authentication Proxy should be run: [nobody] Copying files... Done. Create an initialization script to run the proxy upon startup? [yes/no] yes Installation completed. Before starting the Authentication Proxy, Please edit the configuration file at: /opt/duoauthproxy/conf/authproxy.cfg
設定
設定ファイルは「/opt/duoauthproxy/conf/authproxy.cfg」です。
- 設定が必要なのは
[duo_only_client]
セクションと[radius_server_duo_only]
の2つです。それ以外の設定は全て削除またはコメントアウトします。 [duo_only_client]
セクションは、セクション名のみを書きます。[radius_server_duo_only]
セクションには以下を設定します。
項目 | 設定値 | 備考 |
---|---|---|
ikey | インテグレーションキー | Duoで発行されたものを設定 |
skey | シークレットキー | Duoで発行されたものを設定 |
api_host | APIホスト名 | 「api-XXXXXXXX.duosecurity.com」Duoで発行されたものを設定 |
radius_ip_1 | Microsoft ADのIPアドレス1 | |
radius_secret_1 | 共有シークレットコード1 | 同じシークレットコードをMicrosoft AD側にも設定 |
radius_ip_2 | Microsoft ADのIPアドレス2 | |
radius_secret_2 | 共有シークレットコード2 | 共有シークレットコード1と同じものを設定 |
client | duo_only_client |
認証プロキシが一次認証(プライマリ認証)を実行するために使用する認証方式 今回のようにMFAの2次認証(セカンダリ認証)に利用する場合はduo_only_client を設定する |
port | 1812 | RADIUS認証リクエストの接続ポート。デフォルト:1812 |
failmode | safe または secure |
Duoのサービスに接続できない場合の動作 safe : 一次認証の成功 = ユーザー認証が許可される(デフォルト) secure : ユーザー認証が拒否される |
- 設定ファイルの例
[duo_only_client] [radius_server_duo_only] ikey=XXXXXXXXXXXXXXXXXXXX skey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx api_host=api-xxxxxxxx.duosecurity.com radius_ip_1=10.0.0.100 radius_secret_1=theradiussecret radius_ip_2=10.0.1.200 radius_secret_2=theradiussecret client=duo_only_client port=1812 failmode=safe
共有シークレットコードは、実際には十分に複雑な文字列を設定してください。
起動
$ sudo /opt/duoauthproxy/bin/authproxyctl start
セキュリティグループの設定
以下の通信を許可します。
- Microsoft ADのセキュリティグループ:Duo Authentication Proxyへの、UDP/1812のアウトバウンド通信を許可
- Duo Authentication Proxyのセキュリティグループ:Microsoft ADからの、UDP/1812のインバウンド通信を許可
Microsoft ADのセキュリティグループ設定
- WorkSpacesのマネージメントコンソールを開いて「ディレクトリ」を選択します。
- ディレクトリ(Microsoft AD)のセキュリティグループIDを確認します。
- EC2のマネージメントコンソールからMicrosoft ADのセキュリティグループを選択し、Duo Authentication ProxyへのUDP/1812のアウトバウンド通信を許可します。
Duo Authentication Proxyのセキュリティグループ設定
Duo Authentication Proxy側は、Microsoft ADからのUDP/1812のインバウンド通信を許可します。
Microsoft ADのMFAの有効化
- Directory Serviceのマネージメントコンソールを開き、Microsoft ADのディレクトリIDをクリックします。
- Microsoft ADの設定で「多要素認証の有効化」にチェックを入れます。
- 以下を設定し「ディレクトリの更新」をクリックします。
項目 | 設定値 | 備考 |
---|---|---|
RADIUSサーバーのIPアドレス | Duo Authentication ProxyのIPアドレス | カンマ区切りで複数指定可能 |
ポート | 1812 | |
共有シークレットコード | Duo Authentication Proxyに設定したものを同じシークレットコードを設定 | |
共有シークレットコードの確認 | 共有シークレットコードの確認入力 | |
プロトコル | PAP | |
サーバータイムアウト(秒単位) | RADIUSリクエストのタイムアウト値 | 最大50秒まで設定可能 |
最大再施行回数 | RADIUSリクエストに許可される最大再施行回数 | 最大10回まで設定可能 |
- 「RADIUSステータス」が「完了済み」になれば設定完了です。
Duoのユーザー作成
Duo側でWorkSpacesのログインユーザーと同名のユーザーを作成します。
- Duoの管理画面で「User」を選択し「Add User」をクリックします。
- ユーザー名を入力し「Add User」をクリックします。
- ユーザーのメールアドレスを入力し「Save Changes」をクリックします。
- 「Send Enrollment Email」をクリックして、ユーザーにMFA設定のためのメールを送信します。
ユーザー側のMFA設定
ユーザー側でMFAを設定します。今回はiPhoneを利用する場合の手順をご紹介します。 iPhoneには予めDuo Mobileをインストールしておきます。
- Enrollmentのメールが送信されてくるので、メール本文中のリンクをクリックします。
- 「Start Setup」をクリックします。
- 認証に利用するデバイスを選択します。(Mobile phoneを選択します。)
- 国名を選択し、電話番号を入力します。
- Mobile phoneの種類を選択します。(iPhoneを選択します。)
- 「I have Duo Mobile installed」をクリックします。
- Duo Mobileを起動していQRコードをスキャンします。
- 以下の画面が表示されればMFAの設定完了です。「Finish Enrollment」をクリックします。
WorkSpacesに接続
WorkSpacesクライアントを起動すると、ユーザー名とパスワードに加えてMFAコードの入力欄が表示されます。
Duo Mobileを起動して表示されるMFAコードを入力します。
まとめ
実運用ではAD Connectorを利用してオンプレミス環境にある既存のActive Directoryと連携するケースが多いかと思いますが、その場合も今回ご紹介したものと同様の手順でMFAを導入することができます。
Amazon WorkSpacesをよりセキュアに利用するために、MFAの導入をご検討ください。